
package PaqComunicaciones;

import PaqCORBA.GestorCORBA;
import PaqCORBA.SesionCORBAHelper;
import PaqCORBA.GestorCORBAHelper;
import PaqCORBA.SesionCORBA;
import PaqCORBA.ClienteCORBA;
import PaqCORBA.ClienteCORBAHelper;
import org.omg.CosNaming.NameComponent;

/**
 * 
 * 
 */
public class CorbaConexionCliente extends PaqComunicaciones.CorbaConexion {

/**
 * <p>Does ...</p>
 * 
 */
    public  CorbaConexionCliente(int _puerto, String _host) {        
        super(_puerto,_host);
    }

/**
 * <p>Does ...</p>
 * 
 * 
 * @param nombre 
 * @return 
 */
    public GestorCORBA resolverExamenesOnline(String nombre) {
        PaqCORBA.GestorCORBA sc = null;
        try {
            // resuelve la Referencia a Objeto y obtiene una referencia al sirviente
            sc = GestorCORBAHelper.narrow(namingContextRef.resolve_str(nombre));
        } catch (Exception e) {
            System.err.println("ERROR: " + e);
            e.printStackTrace(System.out);
        }
        return sc;
    } 

/**
 * <p>Does ...</p>
 * 
 * 
 * @param nombre 
 * @return 
 */
    public SesionCORBA resolverSesion(String nombre) {
        SesionCORBA sC = null;
        try {
            // resuelve la Referencia a Objeto y obtiene una referencia al sirviente
            sC = SesionCORBAHelper.narrow(namingContextRef.resolve_str(nombre));
        } catch (Exception e) {
            System.err.println("ERROR: " + e);
            e.printStackTrace(System.out);
        }
        return sC;
    }


    public void registrarCliente(PaqCliente.Usuario cliente, String nombre) {
        try {
            // registrar el cliente en el ORB
            // y obtener una referencia CORBA
            org.omg.CORBA.Object ref = rootpoa.servant_to_reference(cliente);
            ClienteCORBA href = ClienteCORBAHelper.narrow(ref);

            // registrar el sirviente con el nombre del cliente
            NameComponent path[] = namingContextRef.to_name(nombre);
            namingContextRef.rebind(path, href);

            System.out.println(nombre+" listo ...");

            // espera las invocaciones de los clientes
            orb.run();
        } catch (Exception e) {
            System.err.println("ERROR: " + e);
            e.printStackTrace(System.out);
        }
    }
 }
